/**
*!!很重要的经验，如果这个里面有比较复杂的图形，则最好是cacheAsBitmap，否则cpu占用会很高，而且要不需要显示的动画关闭掉
*如果不catchAsBitmap,100个mc能占50%的cpu!! 
*
*注意一个很重要的问题是md里的东西的变化导致整个group重新排序，这是很耗费运算量的
*解决方案是：针对spreit,我能知道他的位置，旋转，缩放是哪个是脏的。只有位置变化和摄像机变化才会对外通报说我变化了
*
*注意这个的scael和rotation会始终刷新的，
*但是只有当位置变化或者摄像机变化或者forceRefresh的时候才通知外部自己变了才去重新排序
*
*注意这个里的东西是底面中心对齐
*/
package kgame5.k3d.core.obj3d.node3d {
import kgame5.k3d.core.obj3d.node3d.Node3D;
import kgame5.k3d.core.render.RenderSessionData;
import kgame5.k3d.core.render.layerrender.impl.Sprite3DLayerRender;

import flash.display.MovieClip;

//TODO 这个要做成支持新式的
public class Sprite3D extends Node3D{
	
	
	
	//__________________________Method____________________________
	public function Sprite3D(mc:MovieClip,bUseScale:Boolean=true,bUseRotation:Boolean=false){
		super();
		renderer=new Sprite3DLayerRender(mc,bUseScale,bUseRotation);
	}
	
	
	//这个要返回值的原因是当位置旋转缩放都不变的时候,就不排序,因为排序是要消耗很大运算的cpu的，数目越多排序越慢
	//返回的是否改变了 自己的 位置，旋转，缩放,这些是需要重新排序的,改变了返回true,不改变是false
	//改变位置，旋转，缩放都回导致重新排深度的,
	override public function Update(rsd:RenderSessionData,isParentDirty:Boolean):void{
		//T.p("Sprite3D.Update "+this.isVisible());
		
		//--
		if(isVisible()==false){
			return ;//就当是位置，旋转，缩放都没变,
		}
		
		//--
		ti.calcMoc_Sprite3D(parentNode.ti.Mow,rsd.Mwc, rsd.isMwcDirty,isParentDirty);//这个运算量还不是很高，只是matrix相乘，依次就可以了，不是matrix*很多个vertex
		
		//刷新
		renderer.render(null,null,ti,rsd);
		
		
	}
}//end of class
}